#include "ProcessPool.hpp"

int main()
{
    ProcessPool pp(10); // 创建10个子进程
    pp.InitProcessPool([](int fd)
                       {
        while(true)
        {
            int code = 0;
            std::cout << "子进程阻塞: " <<  getpid() << std::endl;
            ssize_t n = read(fd , &code , sizeof(code));
            if(n == sizeof(code))
            {
                std::cout << "子进程被唤醒: " << getpid() << std::endl;
                //根据任务码执行任务
                if(code >=0 && code < tasks.size())
                {
                    tasks[code]();
                }
                else
                {
                    std::cerr<< "没有找到父进程所给任务码对应的任务" <<std::endl;
                }
            }
            else if(n==0)
            {
                //父进程需要等待子进程的退出，子进程如何退出？关闭父进程所对应的写端，子进程会读到文件的结尾
                //子进程跳出循环便可
                std::cout << "子进程退出了：" <<getpid() << std::endl;
                break; 
            }
            else
            {
                std::cerr << "read fd: " << fd << "error" <<std::endl;
                break;
            }
        } }); // 初始化

    // 控制子进程
    pp.PollingCtrlSubProcess(10);

    // 父进程等待子进程
    pp.WaitCtrlSubProcess();
    return 0;
}
